package br.com.sistema.control;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import br.com.sistema.dao.VendaDAO;
import br.com.sistema.dao.VendaDAOImplements;
import br.com.sistema.entidade.Produto;
import br.com.sistema.entidade.Venda;
import br.com.sistema.util.Constantes;
import br.com.sistema.util.Fachada;
import br.com.sistema.util.LancamentosDeMensagens;

public class VendaRN implements Serializable{

	private static final long serialVersionUID = 1L;
	private VendaDAO vendaDao;

	public VendaRN() {
		this.vendaDao = new VendaDAOImplements();
	}

	public void salvar(Venda venda) {
		if (venda.getProduto().isEmpty() || venda.getProduto() == null) {
			LancamentosDeMensagens.mensagemErro(Constantes.CARRINHO_VAZIO
					.getValue());
		} else if (venda.getCliente() == null
				|| venda.getCliente().getNome() == "") {
			LancamentosDeMensagens
					.mensagemErro(Constantes.FINALIZAR_COMPRA_SEM_CLIENTE
							.getValue());
		} else {
			venda.setDataVenda(new Date());
			venda.setFlagVendaAtiva(0);
			this.vendaDao.salvar(venda);
			LancamentosDeMensagens.mensagemInfo(Constantes.SALVO_COM_SUCESSO.getValue());
		}
	}

	public Produto buscarProdutoVenda(Produto produto) {
		if (validarProduto(produto)) {
			Produto produtoPesquisado = Fachada.getInstancia().pesquisarProdutoPorNome(produto
					.getDescricao());
			return produtoPesquisado;
		} else {
			LancamentosDeMensagens.mensagemErro(Constantes.ESCOLHER_PRODUTO
					.getValue());
		}
		return null;
	}

	public List<Venda> listar() {
		return this.vendaDao.listar();
	}

	public void remover(Integer id) {
		this.vendaDao.remover(id);
	}

	public Double calcularTotal(List<Produto> listaProduto) {
		Double total = 0d;
		if (!listaProduto.isEmpty()) {
			for (Produto p : listaProduto) {
				total += p.getValor();
			}
		}
		return total;
	}
	
	public Double calcularTotalVenda(List<Venda> listaVenda) {
		Double total = 0d;
		if (!listaVenda.isEmpty()) {
			for (Venda v : listaVenda) {
				total += v.getValorTotal();
			}
		}
		return total;
	}

	private boolean validarProduto(Produto produto) {
		if ((produto != null)
				&& (produto.getDescricao() != null && !(produto.getDescricao()
						.equals("")))) {
			return true;
		} else {
			return false;
		}
	}

	public List<Venda> buscarVendas(Date dataInicial, Date dataFinal, String flagStatusVenda) {
		
		return this.vendaDao.buscarVendas(dataInicial,dataFinal, Integer.parseInt(flagStatusVenda));
		
	}
	
	public void cancelarVenda(Venda venda){
		if(venda.getFlagVendaAtiva().equals(1)){
			LancamentosDeMensagens.mensagemErro(Constantes.ERRO_CANCELAR_VENDA.getValue());
		}else{
			venda.setFlagVendaAtiva(1);
			this.vendaDao.atualizar(venda);
			LancamentosDeMensagens.mensagemInfo(Constantes.VENDA_CANCELADA.getValue());
		}
	}

	public List<Venda> buscarPorID(Integer id) {
		List<Venda> lista = new ArrayList<Venda>();
		lista.add(this.vendaDao.buscar(id)); 
		return lista;
		
	}
}
